home *** CD-ROM | disk | FTP | other *** search
/ Eagles Nest BBS 7 / Eagles_Nest_Mac_Collection_Disc_7.TOAST / General Communication / WB-ARA < prev    next >
Text File  |  1992-07-06  |  24KB  |  695 lines

  1. Article 11866 of comp.sys.mac.comm:
  2. Xref: caen comp.sys.mac.comm:11866 comp.dcom.modems:21220
  3. Path: caen!uakari.primate.wisc.edu!ames!apple!apple!sphns
  4. From: kateley@apple.com (Jim Kateley)
  5. Newsgroups: apple.remote-access,comp.sys.mac.comm,comp.dcom.modems
  6. Subject: ARA script for Telebit WorldBlazer (V.32bis)
  7. Message-ID: <kateley-200692210144@sphns.support.apple.com.>
  8. Date: 21 Jun 92 04:07:42 GMT
  9. Sender: daemon@Apple.COM
  10. Followup-To: apple.remote-access
  11. Distribution: usa
  12. Organization: Apple Computer Campbell
  13. Lines: 678
  14.  
  15. Hello there,
  16.  
  17. Here's a AppleTalk Remote Access script for the Telebit WorldBlazer modem
  18. using V.32bis as it's maximum speed.  Please note that this does not
  19. replace
  20. the T3000 script I posted previously.  Copious amounts of comments
  21. are included in the script.  If you want to use Turbo-PEP, there will
  22. be another posting with a ARA script using Turbo-PEP as it's maximum speed,
  23. although you probably don't want to use Turbo-PEP for ARA unless you 
  24. have no other option.
  25.  
  26. _____________________________cut here______________________________________
  27. ! "Telebit WorldBlazer Modem (V.32bis) 6/4/92" JFK
  28. ! Adapted from the Telebit T3000 script
  29. ! "Telebit T3000 Modem 11/11/91" JFK
  30. ! 11/14/91 JFK - Added a ton o' comments...
  31. ! 11/23/91 JFK - Cleaned up comments a little bit more,
  32. !                and added S11=50.
  33. ! 12/2/91  JFK - Took S11 back out.
  34. ! 12/9/91  JFK - Added the pinouts for the RTS/CTS cable to the comments
  35. !                Since you have to make a hardware handshaking cable.
  36. ! 1/16/92  JFK - Add a bunch more comments about the cable.
  37. ! 3/30/92  JFK - Added comments about the hang up sequence.
  38. ! 3/31/92  JFK - Added sbreak in hangup sequence to speed things up.
  39. ! 3/31/92  JFK - Added S38=3 to help ensure that the modem will be
  40. !                able to transmit all the data in its buffer (including
  41. !                the disconnect command for the remote modem!) before
  42. !                it hangs up.
  43. ! 4/2/92   JFK - Changed S38 to 255.  See notes below.
  44. ! 4/2/92   JFK - Changed S51 to 254 in hang up sequence since 19200 is
  45. !                our DTE speed.
  46. ! 6/4/92   JFK - I actually forgot to set S51 to 254 on 4/2.  It's done
  47. !                now
  48. ! 6/4/92   JFK - Added Short break and 1/2 second pause in label
  49. !                64.  Apparently the WorldBlazer's command mode
  50. !                is not as robust as the T3000, so this step
  51. !                is done to ensure the modem will respond to commands
  52. !                after it is hung up.  If it is not, the script will
  53. !                not be able to configure the modem to answer the
  54. telephone.
  55. !                Also, if label 64 does not receive an "OK", loop back
  56. !                up to the top of the hangup sequence (label 60) and try
  57. again.
  58. ! 6/12/92  JFK - Began to test Turbo PEP stuff.
  59. ! 6/13/92  JFK - Configured modem to not use Turbo-PEP.  This is due to the
  60.  
  61. !                poor performance ARA obtains with Turbo-PEP's half-duplex
  62. !                design.  
  63. !
  64. !  Note the cable requirements when using a V.32bis modem.  Since a lot
  65. !  of people do not have this cable, you should not use this approach when
  66. !  scripting for V.32 or slower modems.
  67. !
  68. ! Cable needed to use AppleTalk Remote Access with V.32bis modems:
  69. !   Din-8    DB-25
  70. ! 1 (DTR)   4,20 (RTS, DTR)
  71. ! 2 (CTS)   5 (CTS) *
  72. ! 3 (TxD-)  2 (TD)
  73. ! 4 (SG)    7 (SG)
  74. ! 5 (RxD-)  3 (RD)
  75. ! 6 (TxD+)  Not Connected
  76. ! 7 (GPi)   8 (DCD)
  77. ! 8 (RxD+)  7 (SG)
  78. !  
  79. ! * Normally 2(CTS)<->6 (DSR) on other Macintosh cables.
  80. !
  81. !-  One consequence of using this cable is that DSR (or DCD) from the modem
  82. is  
  83. !   no longer connected to the Macintosh.  This does not let your Macintosh
  84.  
  85. !   communication software use the DSR (or DCD) signal to detect carrier
  86. loss.  
  87. !   And since the Macintosh Serial driver does not support the GPi
  88. input...you 
  89. !   are sort of stuck, unless your communications software does use the GPi
  90.  
  91. !   input.  Or Apple builds GPi support into the serial driver.
  92. !
  93. !-  Since DTR and RTS are connected together, the modem must be configured
  94. !   to ignore DTR (usually the &D0 command) when using this cable with
  95. other 
  96. !   communications applications.  Otherwise, when RTS handshaking from the
  97. Mac 
  98. !   is used, the modem will drop connection the first time the Mac
  99. de-asserts 
  100. !   RTS.
  101. !
  102. !-  If there is a need to use DTR to make the modem disconnect, RTS
  103. handshaking 
  104. !   cannot be used to control the flow of data from the modem to the
  105. Macintosh.  
  106. !   CTS handshaking (from the modem to the Macintosh) is available.  This
  107. is 
  108. !   what ARA does so it can force the modem to hang up, and at the same
  109. time 
  110. !   the modem can signal the Macintosh to stop sending data.  This assumes
  111. that 
  112. !   the Macintosh will always be able to accept data from the modem.  This
  113. will 
  114. !   not be true if the Macintosh is talking to the modem at 57.6KBps with 
  115. !   V.32bis & V.42Bis.  There will be times when the Macintosh will need to
  116.  
  117. !   signal the modem to stop sending data.
  118. !
  119. !In summary, with this cable:
  120. !
  121. !If you want to use RTS hardware handshaking, you cannot use DTR to control
  122. the 
  123. !modem.  You will have to resort to other methods to coerce the modem to 
  124. !disconnect.
  125. !
  126. !If you want to control the modem with DTR, you cannot use RTS hardware 
  127. !handshaking so the Macintosh must be able to accept data from the modem at
  128. all 
  129. !times, or can recover if data is lost.
  130. !
  131. !In either case you can use CTS hardware handshaking so the modem can
  132. signal 
  133. !the Macintosh to discontinue sending data.
  134. !
  135. @ORIGINATE
  136. @ANSWER
  137. !
  138. ! Talk to the modem at 19,200 bps.  the WorldBlazer should auto-baud this
  139. ! unless the user has locked the port to a particular speed.  If it
  140. ! is locked to a different speed, the user will need to change that.
  141. !
  142. serreset 19200, 0, 8, 1
  143. !
  144. !  The idea here is to get the modem into a known state, and then change
  145. only 
  146. !  the registers that are necessary to support the connection.  Most of the
  147.  
  148. !  time AT&F will be sufficient, but some modems allow the user to change
  149. the 
  150. !  F0 parameters.  There isn't much that can be done to prevent this, but
  151. if 
  152. !  the modem has any pre-configured configurations, and one of them sets 
  153. !  hardware handshaking, use it.
  154. !
  155. ! Recall the factory configuration
  156. ! F9 is the built in pre-configured setting for CTS/RTS handshaking on the 
  157. ! WorldBlazer.  Since it's possible for the user to modify F0 parameters,
  158. this 
  159. ! is a little safer.
  160. !
  161. ! AT&F9 sets:
  162. ! &C1 - DCD is on after connect
  163. ! &D2 - DTR on/off disconnects
  164. ! S58=2 - Use RTS/CTS flow control in full-duplex mode
  165. ! S61=1 - Go into command mode when receiving break from DTE (see
  166. !         @HANGUP for why the script cares about this).
  167. ! S181=1 - Turn *on* DTE <-> line buffering if there is no error control.
  168. !                            Since the modem will be talking to the Mac at 
  169. !                            19,200 bps no matter what speed it connects
  170. at, 
  171. !                            this needs to be on.
  172. !
  173. !  Every time the script needs to send commands to the modem, the strategy
  174. is:  
  175. !  Clear all matchstrings, look for specific responses, and loop around a 
  176. !  couple of times.  Later in the script, certain loops pause 50-70
  177. seconds, 
  178. !  such as when the script dials a number and is waiting for a connection. 
  179.  
  180. !  Other times, the script pauses 3-5 seconds and loops around. When the
  181. script 
  182. !  is sending commands to the modem, it should expect to see a response
  183. within 
  184. !  a couple of seconds, so it's best to look quickly and exit with an error
  185. in 
  186. !  a reasonable amount of time so the user does not wait a for a long time 
  187. !  before they are notified that they may need to power-cycle/reset the
  188. modem.  
  189. !  When the script is dialing out over a telephone system or PBX, it needs 
  190. !  enough time to make a connection.  In short, if it's communicating to a 
  191. !  modem, loop in 3-7 second increments.  If the script is waiting for 
  192. !  something other than a modem response (like a completed connection or 
  193. !  terminal server) it may need 60-70 seconds.
  194. !
  195. !  If the defaults cannot be set, jump down to label 59, which exits and
  196. asks 
  197. !  the user to check out the modem.  If an  AT&F command will not be
  198. accepted, 
  199. !  the modem may be hung and needs to be manually reset.
  200. !
  201. settries 0
  202. matchclr
  203. @LABEL 1
  204. matchstr 1 4 "OK\13\10"
  205. write "AT&F9\13"
  206. matchread 30
  207. inctries
  208. iftries 2 59
  209. ! Modem is not responding, reset and send a break
  210. DTRClear
  211. pause 5
  212. DTRSet
  213. SBreak
  214. jump 1
  215. !
  216. !  The script was able to get the modem into a default factory state.  Now 
  217. !  set the basic hardware type configuration such as command echo, hardware
  218.  
  219. !  handshaking, and DTR control.  If the &F9 command had not set up
  220. handshaking 
  221. !  this is where it would be done.  It's not desirable to create one long 
  222. !  command string with everything on it because some modems cannot handle a
  223.  
  224. !  long command string, and long strings are harder to debug.  It's easy
  225. !  to enter an incorrect S-register value.  For the most part, the
  226. following 
  227. !  commands are probably common across a lot of modems, but always look up
  228. the 
  229. !  commands in the modem manual.
  230. !
  231. ! Next, Set up the configuration: drop connection after losing DTR
  232. !    Turn off auto answer and command echo.   
  233. !
  234. ! &D3 - DTR on/off resets modem 
  235. ! S0=0 - Don't answer calls
  236. ! E0 - Turn command echo off
  237. @LABEL 4
  238. matchclr
  239. pause 5
  240. matchstr 1 5 "OK\13\10"
  241. write "AT&D3S0=0E0\13"
  242. matchread 30
  243. jump 59
  244. !
  245. !  Now that the modem hardware & flow control parameters are set, make sure
  246. any 
  247. !  protocol negotiation is disabled, and issue any modem specific features 
  248. !  here.  Make sure that MNP4/V.42, and MNP5-10/V.42bis negotiations are 
  249. !  disabled.  By the way, some V.32/V.32bis modems have an option to
  250. disable 
  251. !  Trellis error control,  which is part of the physical layer modulation. 
  252.  
  253. !  This is not the same as MNP/V.42, and you do not want to disable it!
  254. !
  255. !  Make sure that the modem is configured so it does NOT require error
  256. control 
  257. !  to complete a link.  ARA 1.0 does all error correction/data compression
  258. in 
  259. !  software.  All ARA wants is the fastest raw data pipe it can get.  If
  260. the 
  261. !  script spends time trying to negotiate some error control, the modems
  262. and/or 
  263. !  Remote Access may time out.
  264. !
  265. !  Also note the S38 configuration.  It is noted later in the script that
  266. it is 
  267. !  desirable to ensure that the modem's buffer has transmitted all of it's 
  268. !  data before it actually hangs the modem up.  This ability appears to be 
  269. !  implemented on a lot of modems.
  270. !
  271. !  This set of commands is going to be implemented differently on different
  272. !  vendors V.32bis modems.  In this example, Telebit uses S registers.
  273. !  Other modems may use S registers (but different registers), or \
  274. !  commands, or % commands; you get the idea.  (Did I mention that you
  275. !  really, really want to have your modem manual handy?)
  276. !
  277. !  It is important that the modem is configured so that it returns
  278. !  the connected speed, NOT the DTE speed.  The script need to know what
  279. the 
  280. !  real line speed is in order to set ARA's internal timers.  Some
  281. !  modems don't have the option to display the line speed.  In that case
  282. the 
  283. !  performance of the connection may not be optimal.
  284. !
  285. ! Next, disable MNP and error control, set the delay before disconnect,
  286. ! and extended result codes (CTS/RTS flow control and internal DTE<->DCE
  287. ! buffering was set when &F9 was issued , so it is not necessary to do it 
  288. ! again).
  289. !
  290. ! S180=0 - Turn off all error detection/correction (ARA does MNP and
  291. !          compression itself.  It needs these turned off in the modem).
  292. ! S38=255  - Wait until the modem's buffer is clear OR the other modem 
  293. !            disconnects after an ATH is issued before dropping the line.
  294. !            This is done to ensure that all any data in the modem's buffer
  295. !            has been transmitted to the remote modem before it
  296. disconnects.
  297. !            If the remote connection does not receive the
  298. !            disconnect packet (usually the last one sent) it could take
  299. !            up to 45 seconds for the remote connection to timeout and
  300. !            disconnect.
  301. ! S50=254  - Attempt to connect at closest current DTE speed (Turbo-PEP
  302. !            excluded).  This allows the modem to connect at the highest
  303. !            possible rate without attempting Turbo-PEP.
  304. ! X2 - Issue extended result codes.  This will display busy, connect XXX,
  305. etc.
  306. !      X2 will say "CONNECT XXX"  Where XXX is the line speed (as opposed
  307. to
  308. !      DTE speed).  This is so ARA can determine what speed the modems are 
  309. !      communicating at for timing.
  310. !
  311. @LABEL 5
  312. pause 5
  313. matchstr 1 6 "OK\13\10"
  314. write "ATS180=0S38=255S50=254X2\13"
  315. matchread 30
  316. jump 59
  317. !
  318. !  The modem should now be properly configured.  Now check to see if the
  319. user 
  320. !  has turned off the modem speaker.  If they have, send an additional
  321. command 
  322. !  to turn it off.
  323. !
  324. ! If speaker on flag is true, jump to label 8.  Otherwise turn off the
  325. speaker.
  326. !
  327. @LABEL 6
  328. ifstr 2 8 "1"
  329. pause 5
  330. matchstr 1 8 "OK\13\10"
  331. write "ATM0\13"
  332. matchread 30
  333. jump 59
  334. !
  335. ! The modem is ready so enable answering, or originate a call.
  336. !
  337. @LABEL 8
  338. pause 5
  339. ifANSWER 30
  340. note "Dialing ^1" 3
  341. write "ATDT^1\13"
  342. !
  343. !  Be aware that different modems will have different format strings 
  344. !  to return connection results.  You need to understand the different
  345. possible 
  346. !  strings and set this area (and then answer area at label 31) to the 
  347. !  appropriate value.  Also, remember that the modem was configured to
  348. return 
  349. !  the connect speed if possible (The X2 command up at label 5).  It's also
  350.  
  351. !  useful if the modem can return busy, no dialtone, etc. since the script
  352. will 
  353. !  be able to exit quicker and let the user know what is going on.
  354. !
  355. !  Also note that the script waits at the bottom of label 9 for a 70
  356. seconds, 
  357. !  rather then looping around.  Why?  Well, if the script re-issues the
  358. dial 
  359. !  command too soon, that would cause the modem to hang up.  At this point
  360. the 
  361. !  script should wait a reasonable amount of time for one of these strings
  362. to 
  363. !  return from the modem and take the appropriate action.
  364. !
  365. @LABEL 9
  366. matchstr 1  11 "CONNECT 1200\13\10"
  367. matchstr 2  12 "CONNECT 2400\13\10"
  368. matchstr 3  13 "CONNECT 4800\13\10"
  369. matchstr 4  19 "CONNECT 7200\13\10"
  370. matchstr 5  14 "CONNECT 9600\13\10"
  371. matchstr 6  20 "CONNECT 12000\13\10"
  372. matchstr 7  18 "CONNECT 14400\13\10"
  373. matchstr 8  50 "NO CARRIER\13\10"
  374. matchstr 9  50 "ERROR\13\10"
  375. matchstr 10 52 "NO DIALTONE\13\10"
  376. matchstr 11 53 "BUSY\13\10"
  377. matchstr 12 54 "NO ANSWER\13\10"
  378. matchread 700
  379. jump 59
  380. !
  381. !  All that is done for different connect speeds is to issue a 
  382. !  "CommunicatingAt" command.  Remember, the interface speed is locked
  383. !  to 19,200 bps so the script doesn't want to reset the serial speed after
  384. it 
  385. !  connects.
  386. !
  387. !  CommunicatingAt tells ARA what the actual line speed is so that it
  388. !  can set it's timers appropriately.  I guess performance would be
  389. !  sub-optimal if this is not set...
  390. !
  391. @LABEL 11
  392. note "Communicating at 1200 bps." 2
  393. CommunicatingAt 1200
  394. jump 15
  395. !
  396. @LABEL 12
  397. note "Communicating at 2400 bps." 2
  398. CommunicatingAt 2400
  399. jump 15
  400. !
  401. @LABEL 13
  402. note "Communicating at 4800 bps." 2
  403. CommunicatingAt 4800
  404. jump 15
  405. !
  406. @LABEL 19
  407. note "Communicating at 7200 bps." 2
  408. CommunicatingAt 7200
  409. jump 15
  410. !
  411. @LABEL 14
  412. note "Communicating at 9600 bps." 2
  413. CommunicatingAt 9600
  414. jump 15
  415. !
  416. @LABEL 20
  417. note "Communicating at 12000 bps." 2
  418. CommunicatingAt 12000
  419. jump 15
  420. !
  421. @LABEL 18
  422. note "Communicating at 14400 bps." 2
  423. CommunicatingAt 14400
  424. jump 15
  425. !
  426. ! Set CTS handshaking ON in the serial port (that's the 1 in the HSReset
  427. ! command below )
  428. !
  429. !  The modems have connected, so enable hardware handshaking on the serial 
  430. !  port.  If the script is answering a telephone call, just exit right away
  431. and 
  432. !  starting communicating.  If the script is dialing out, give the other
  433. end 
  434. !  some time (3 seconds in this example) to get ready to talk to this
  435. modem.
  436. !  Exit 0 tells Remote Access that the script was successful in attempting
  437. a
  438. !  connection.
  439. !
  440. @LABEL 15
  441. HSReset 0 1 0 0 0 0 
  442. ifANSWER 16
  443. pause 30
  444. @LABEL 16
  445. exit 0
  446. !
  447. !  Notice that the @ANSWER label is actually a comment here, and that 
  448. !  @ORIGINATE and @ANSWER start at the same place.  What's the point of
  449. having 
  450. !  separate entry points if they are not used?  Well, in the case of
  451. modems, 
  452. !  when they dial out or wait for a call, the setup is usually the same. 
  453. One 
  454. !  reason for separate entry points is when the script is not directly
  455. talking 
  456. !  to a modem, but maybe to a PBX or terminal server.  It may be necessary
  457. to 
  458. !  have completely different configuration for answering and originating 
  459. !  connections.
  460. !
  461. ! @ANSWER
  462. ! Set up the modem to answer the telephone.
  463. !
  464. @LABEL 30
  465. write "ATS0=1\13"
  466. matchstr 1 31 "OK\13\10"
  467. matchread 30
  468. jump 59
  469. !
  470. !  What is userhook 1 doing in label 32?  Here's the idea:  Either this
  471. script 
  472. !  controls a server that is waiting to answer the telephone, or it's
  473. waiting 
  474. !  for a callback to a connection that was initiated.  AppleTalk Remote
  475. Access 
  476. !  does a "passive" listen on the serial port (via the Serial Port
  477. Arbitrator) 
  478. !  so that other communications applications can use the serial port when
  479. ARA 
  480. !  is not using it.  When a call comes in for a server or callback, there
  481. !  will be about 5-14 seconds while the modems negotiate the connection.
  482. !  What would happen if a communications application on this Macintosh 
  483. !  wanted to use the serial port during that time?  Both connections
  484. !  would fail.  The userhook 1 command tells ARA to mark the serial port in
  485.  
  486. !  use.  When that happens, applications that want to use the serial port
  487. will 
  488. !  be told it's busy, and the incoming connection can complete.  With that
  489. in 
  490. !  mind, the strategy below is:  When the modem receives a ring, jump to
  491. label 
  492. !  32, issue the userhook 1 command, then jump back up to label 31, wait
  493. for 
  494. !  the connect result code and continue processing the script.
  495. !
  496. @LABEL 31
  497. matchstr 1  32 "RING\13\10"
  498. matchstr 2  11 "CONNECT 1200\13\10"
  499. matchstr 3  12 "CONNECT 2400\13\10"
  500. matchstr 4  13 "CONNECT 4800\13\10"
  501. matchstr 5  19 "CONNECT 7200\13\10"
  502. matchstr 6  14 "CONNECT 9600\13\10"
  503. matchstr 7  20 "CONNECT 12000\13\10"
  504. matchstr 8  18 "CONNECT 14400\13\10"
  505. matchstr 9  50 "NO CARRIER\13\10"
  506. matchstr 10 50 "ERROR\13\10"
  507. matchstr 11 52 "NO DIALTONE\13\10"
  508. matchstr 12 53 "BUSY\13\10"
  509. matchstr 13 54 "NO ANSWER\13\10"
  510. matchread 700
  511. jump 31
  512. !
  513. @LABEL 32
  514. userhook 1
  515. note "Answering phone..." 2
  516. jump 31
  517. !
  518. !  These are some common error messages when the line is busy, no dialtone,
  519.  
  520. !  etc. They are documented in the Scripting Language Guide.  When the
  521. script 
  522. !  exits with a code other than zero, Remote Access knows that the
  523. connection 
  524. !  failed, and will inform the user with a dialog.
  525. !
  526. ! 50: error messages
  527. !
  528. @LABEL 50
  529. exit -6021
  530. !
  531. @LABEL 52
  532. exit -6020
  533. !
  534. @LABEL 53
  535. exit -6022
  536. !
  537. @LABEL 54
  538. exit -6023
  539. !
  540. @LABEL 59
  541. exit -6019
  542. !
  543. ! Hang up the modem
  544. ! Note:  Why try to enter command mode and hang up the line with ATH, when 
  545. !        de-asserting DTR will always work, and it is used as a last resort
  546.  
  547. !        anyway?  If DTR is used immediately,  the modem will hang up 
  548. !        immediately.  This can have the ill effect of hanging up before
  549. all 
  550. !        the data in the modem's internal transmit buffer has been sent.
  551. !        It is very desirable to have the last byte of data sent make
  552. !        it out of the modem and across the phone line.  Typically,
  553. !        the last packet sent is the disconnect packet, and if
  554. !        the other side misses this packet, it may have to wait up to 45 
  555. !        seconds to hang up.
  556. !
  557. @HANGUP
  558. @LABEL 60
  559. settries 0
  560. HSReset 0 0 0 0 0 0 
  561. @LABEL 61
  562. !
  563. !  Here's the basic logic for hanging up: If the modem can be configured
  564. !  to enter command mode when it receives a short break, send a short
  565. !  break.  Send an ATH to hang the line up (and if possible up in the 
  566. !  configuration, set the modem to attempt to send all the data in the 
  567. !  buffer before it disconnects).  If that fails, it must still be on
  568. !  line, so send the escape sequence to try to drop into command mode.
  569. !  Don't issue a short break again since it did not work the first time.
  570. !  If that fails, de-assert DTR which should force the modem to hang up
  571. !  (make sure the cable is wired properly for this option!).
  572. !  If +++ worked, don't send a short break again; flush the serial port 
  573. !  buffer in case the ATH failed due to any stray data hanging around.
  574. !
  575. !  How was this sequence determined?  Trial and error.  Different vendor's 
  576. !  modems behave differently when disconnecting.  Some modems will not
  577. enter 
  578. !  command modem during a disconnect, and the only option is to de-assert
  579. DTR 
  580. !  to force them to reset.  That's why DTR resets the modem instead of just
  581. !  disconnecting it!  Experiment with this sequence to make it function,
  582. but it 
  583. !  should work with the majority of the modems available.
  584. !
  585. ! Now, since the Telebit modems will drop into command mode when they
  586. receive
  587. ! a short break (S61=1), issue one here.  This will speed up the disconnect
  588. ! sequence by about 5-6 seconds.  Then continue on with normal AT
  589. disconnect
  590. ! processing.
  591. !
  592. Sbreak
  593. !
  594. ! Wait a brief amount of time (1/2 second in this case) so the modem will
  595. be 
  596. ! ready to accept the ATH command.  Pause 1 actually seems to work ok, but 
  597. ! it's set to 5 just to be safe.
  598. !
  599. pause 5
  600. write "ATH\13"
  601. matchclr
  602. matchstr 1 63 "NO CARRIER\13\10"
  603. matchstr 2 63 "OK\13\10"
  604. matchstr 3 63 "ERROR\13\10"
  605. matchread 30
  606. inctries
  607. iftries 3 63
  608. !
  609. ! No response, try escape sequence.  The WorldBlazer does not use
  610. ! the Hayes patented escape sequence with guard time.  It uses the
  611. ! +++AT<command> method now being adopted by most modem manufacturers.
  612. ! Since that is the case, issue +++AT here to attempt to get the modem
  613. ! into command state.
  614. !
  615. write "+++AT\13"
  616. matchclr
  617. matchstr 1 62 "OK\13\10"
  618. matchread 15
  619. !
  620. ! No Response from modem, toggle DTR
  621. !
  622. DTRClear
  623. pause 5
  624. DTRSet
  625. jump 61
  626. !
  627. @LABEL 62
  628. !
  629. ! Pause 1 second to ensure we meet the escape time delay, or
  630. ! to allow the modem time to be ready for the next command.
  631. !
  632. pause 10
  633. Flush
  634. write "ATH\13"
  635. matchstr 1 63 "OK\13\10"
  636. matchstr 2 63 "NO CARRIER\13\10"
  637. matchstr 3 63 "ERROR\13\10"
  638. matchread 30
  639. jump 61
  640. !
  641. !  Now that the modems have disconnected, and the script has possibly reset
  642. the 
  643. !  modem, restore the factory settings.  Remember, the script may have hung
  644. up 
  645. !  the modem in order to get ready for a callback, or it wants to get ready
  646. to 
  647. !  wait to answer a call again.
  648. !
  649. ! recall the factory settings.  Use &F9 again (see note at top of script)
  650. !
  651. @LABEL 63
  652. matchclr
  653. matchstr 1 64 "OK\13\10"
  654. pause 15
  655. write "AT&F9\13"
  656. matchread 30
  657. !
  658. !  Now turn off auto answer if it was turned on to answer a call.  If this 
  659. !  script controls a server, the @ANSWER sequence will be called by ARA.
  660. !  One other thing to watch out for here is that some modems expect to
  661. !  talk to the DTE at the last connected speed.  If this is a V.32bis 
  662. !  modem and it just finished a connection with a 2400 baud modem, it
  663. !  doesn't necessarily want to talk at 2400 the next time!  Some modems
  664. !  don't exhibit this behavior, so play with it and see what happens. 
  665. Finally, 
  666. !  since it successfully hung up,  exit the script with a result code of 0
  667. to 
  668. !  let Remote Access know everything worked.
  669. !
  670. ! Turn off auto answer, set S51 so modem will check interface
  671. ! speed on next connection.  If this is not done, the modem
  672. ! will not try to autobaud, with the result being it exits the 
  673. ! script with an error.
  674. ! S51=254 - Autobaud (19200 bps default)
  675. ! S0=0 - Don't try to answer the phone
  676. !
  677. @LABEL 64
  678. Sbreak
  679. pause 5
  680. matchstr 1 65 "OK\13\10"
  681. write "ATS51=254S0=0\13"
  682. matchread 20
  683. jump 60
  684. !
  685. @LABEL 65
  686. exit 0
  687. ________________________________end________________________________
  688. Jim Kateley
  689. Apple Computer Inc.
  690. Disclaimer:  This is me talking.
  691.  
  692.  
  693.